import Tips from './Tips';

/**
 * 图片管理
 *
 * @export
 * @class Image
 * 
 */
export default class Image {
    /**
     * 预览图片
     *
     * @static
     * @param {array} items
     * @param {string} [option={ background: '#000000', current: 0, loop: false, indicator: 'default/none/number' }]
     * @memberof Image
     * 
     * [PreviewImageOptions](http://www.html5plus.org/doc/zh_cn/nativeui.html#plus.nativeUI.PreviewImageOptions)
     * 
     */
    static previewImage(items, option = {
        background: '#000000',
        current: 0,
        loop: false
    }) {
        plus.nativeUI.previewImage(items, option);
    }

    /**
     * 打开 系统图片
     * 
     * @static
     * 
     * @memberOf System
     */
    static openImage(option = {
        filter: "image",
        multiple: false
    }) {
        return new Promise((resolve, reject) => {
            plus.gallery.pick(file => {
                resolve(file);
            }, error => {
                reject(error);
            }, option);
        });
    }

    /**
     * 压缩图片(重复压缩同一文件会不显示)
     *
     * @static
     * @param {*} sourceSrc
     * @param {*} [option={}]
     * @returns
     * @memberof Image
     * 压缩之后的图片 只能是 .jpg 格式的
     * [CompressImageOptions](http://www.html5plus.org/doc/zh_cn/zip.html#plus.zip.CompressImageOptions)
     */
    static compressImage(sourceSrc, option) {
        // console.log(sourceSrc);
        let destName = sourceSrc.substring(sourceSrc.lastIndexOf('/'), sourceSrc.length);
        // console.log(destName);
        let destSrc = `_downloads${ destName.substring(0, destName.lastIndexOf('.')) }.jpg`;
        // console.log(destSrc);
        const opts = Object.assign({
            src: sourceSrc,     // 压缩转换原始图片的路径
            dst: destSrc,       // 压缩转换目标图片的路径
            overwrite: true,    // 覆盖生成新文件
            format: 'jpg',      // 压缩转换后的图片格式 (支持"jpg"、"png",如果未指定则使用源图片的格式。? 好像只支持jpg)
            // width: '50%',       // 缩放图片的宽度
            // rotate: 270,		    // 旋转图片的角度 (支持值：90-表示旋转90度；180-表示旋转180度；270-表示旋转270度。 注意：若设置rotate属性值不合法，则不对图片进行旋转操作。操作要转换多加90才正确)
            quality: 20         // 压缩图片的质量 (取值范围为1-100，1表示使用最低的图片质量（转换后的图片文件最小）、100表示使用最高的图片质量（转换后的图片文件最大）； 默认值为50。)
            // clip: {
            //     top: '25%',     // 图片裁剪区域与原图片上边界的偏移距离
            //     left: '25%',    // 图片裁剪区域与原图片左边界的偏移距离
            //     width: '50%',   // 图片裁剪区域的宽度
            //     height: '50%'   // 图片裁剪区域的高度
            // }
        }, option);
        console.log(opts);
        return new Promise((resolve, reject) => {
            Tips.loading('处理中...');
            plus.zip.compressImage(opts, source => {
                Tips.loaded();
                resolve({ path: destSrc, source: source});
            }, error => {
                Tips.loaded();
                reject(error);
            });
        });
    }

    /**
     * 打开 相机
     * 
     * @static
     * 
     * @memberOf System
     */
    static openCamera() {
        return new Promise((resolve, reject) => {
            var cmr = plus.camera.getCamera();
            cmr.captureImage(
                function (p) {
                    plus.io.resolveLocalFileSystemURL(
                        p,
                        function (entry) {
                            resolve(entry);
                        },
                        function (e) {
                            reject(e);
                            // console.log("读取拍照文件错误：" + e.message);
                        }
                    );
                },
                function (e) {
                    reject(e);
                    // console.log("失败：" + e.message);
                }, {
                    filename: "_doc/camera/",
                    index: 1
                }
            );
        });
    }
}